'''
面向对象编程的3个重要特点
    -封装
        将数据和处理数据的方法都封装在一个对象中
        将属性私有化，然后同get/set方法对属性进行操作
    -继承
        子类继承父类的属性和方法
    -多态
'''

'''封装'''

class Student:

    def __init__(self):
        self.__name = None
        # 在变量名前加两个下划线__,表示将变量私有化
        # 成员变量在私有化之后，就不能从类的外部进行访问，只能在类的内部进行访问
        self.__age = None

    # 通过类的方法间接访问类的属性-从而对属性进行保护
    def setAge(self,age):
        # 对传入的数据的合法性进行检验
        if age >6 and age <=130:
            self.__age = age
        else:
            print('您传入的年龄非法！')

    def getAge(self):
        return self.__age

    def setName(self,name):
        self.__name = name

    def getName(self):
        return self.__name

s1 = Student()
# s1.name = 'tom'
# print('name=%s'%s1.name)
# s1.__age = 20

s1.setAge(-20)
# print('age=%s'%s1.__age)
print('age=%s'%s1.getAge())


'''继承'''

class Animal:

    def __init__(self,name):
        self.name = name

    def run(self):
        print('%s正在奔跑...'%'动物')

a = Animal('旺财')
a.run()

# Dog类继承了Animal类
class Dog(Animal): 

    # 构造方法不能被继承
    # def __init__(self,name):
    #     super().__init__(name)

    # 方法重写override
    def run(self):
        print('%s正在欢脱的追一只兔子...'%self.name)

    def f(self):
        pass

d = Dog('来福')
d.run()


'''多态'''

print(isinstance(d,Dog))
print(isinstance(d,Animal))


a = 5
# int a = 5
a = 3.14
